//
//  SLTabBar.swift
//  langligelang
//
//  Created by 秦－政 on 2016/10/22.
//  Copyright © 2016年 pete. All rights reserved.
//

import UIKit


// 声明协议
//            protocol SLTabBarDelegate: NSObjectProtocol{
//                // 协议方法
//                func composeButtonClickOfTabBar()
//            }

class SLTabBar: UITabBar {
    
    // 设置代理属性
//    weak var slDelegate:SLTabBarDelegate?
    // 设置闭包属性
    var closure:(()->())?
    
    // 几乎所有继承 UIView 的类构造函数均为是 init(frame)
    // 如果init(frame) 就代表你要用手写代码方式创建该类
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }
    /*
     required  - 必须的
     - 如果你使用手写代码来创建这个类 就必须实现该方法
     - 如果你定义了手写代码创建该类 但是你的同事不知道 他使用 sb || xib 类使用你的类 那么就会走这个方法
     - fatalError("init(coder:) has not been implemented") 不能完成创建
     - fatalError 断言
     */
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
        //        // 支持了 xib
//                super.init(coder: aDecoder)
//                setupUI()
    }
    
    // MARK: - 监听方法
    /*
     - @objc private
     - Swift 静态型语言
     - OC 运行时语言
     - Swift 运行循环时候 根本找不到该方法(按钮点击时候)
     - OC 运行时 使用 kvc 动态派发的方式调用该方法 所以在 Swift 中 如果方法私有后 需要@objc 告知系统 使用 OC 消息运行时来调用
     */

    @objc private func buttonClick(){
        // 判断、执行代理方法
//        slDelegate?.composeButtonClickOfTabBar()
        // 执行闭包
        closure?()
        print("我被点了")
    }
    
    // MARK: - 设置视图
    
    private func setupUI(){
        // 添加控件：一个懒加载按键
        addSubview(composeButton)
    }
    // 设置按键的frame
    override func layoutSubviews() {
        super.layoutSubviews()
        // 设置按键的宽度 下标
        let w = SLSCREENW * 0.2
        var index: CGFloat = 0
        // 遍历tabBar的子控件设置布局
        for value in subviews{
            // 判断是否是我们想要的类型
            if value.isKind(of: NSClassFromString("UITabBarButton")!) {
                // 设置frame
                value.frame.size.width = w
                value.frame.origin.x = w * index
                index += 1
                // 为了给按钮留一个位置，所以中间要空出来
                if index == 2 {
                    index += 1
                }
            }
        }
        // 设置按键的frame
        composeButton.center.x = SLSCREENW * 0.5
        composeButton.center.y = frame.size.height * 0.5
    }
    
    // MARK: - 懒加载控件
    // 撰写按键
    lazy var composeButton: UIButton = {
        let button = UIButton(setImgName: "tabbar_compose_icon_add", backgroundImgName: "tabbar_compose_button", target: self, action: #selector(buttonClick))
        return button
    }()
}
